#include <stdio.h>
#include <stdlib.h>
#include "string.h"
#include <time.h>
#include <sys/time.h>

  // gcc time5.c  -o a.exe   -Wall -g -O0    

void main(){

  test_time_t();

}




/***
 *  1.测试时间戳 
 * 
 * 
 */
void test_time_t(){
   	time_t tNow = -1;
    struct tm tmNow;

    
	time(&tNow);				// 指针做输出型参数
	if (tNow < 0)
	{
		perror("time");
		return -1;
	}

    // 1704538177.  时间戳秒 
    // 1704538177/60/60/24/365= 54 +  1970 = 2024 
    // 
	printf("time: %ld.\n", tNow);

	// ctime 
    //输出格式，给外国人看的： 
    // ctime: Sat Jan  6 18:52:22 2024   
	printf("ctime: %s.\n", ctime(&tNow));




// gmtime 和localtime

	memset(&tmNow, 0, sizeof(tmNow));
	gmtime_r(&tNow, &tmNow); //从 time_t 中获取 tm 


    //    struct tm {
    //            int tm_sec;         /* seconds */
    //            int tm_min;         /* minutes */
    //            int tm_hour;        /* hours */
    //            int tm_mday;        /* day of the month */
    //            int tm_mon;         /* month */
    //            int tm_year;        /* year */
    //            int tm_wday;        /* day of the week */
    //            int tm_yday;        /* day in the year */
    //            int tm_isdst;       /* daylight saving time */
    //        };


    /***
     *  年124月0日6时10.
     * 年124 : 从 1900 年开始
     * 
     * 月0  ： 从1开始
     * 日6  ： 
     * 时10.   utc时间， + 8  
     */

	printf("%d年%d月%d日%d时%d分%d秒.\n", tmNow.tm_year+ 1900, tmNow.tm_mon+1, tmNow.tm_mday, tmNow.tm_hour, tmNow.tm_min, tmNow.tm_sec);
   
   
 //快速格式化  
    char buf[100]={0};
    strftime(buf, sizeof(buf), "%Y * %m * %d, %H-%M-%S.", &tmNow);
	printf("strftime  -> 时间为：[%s].\n", buf);


    
//年124 月0 日6 时18.
/***
 * 
 * gmtime 和 localtime 区别， 
 *  gmtime 返回UTC时间
    localtime 返回本地时间 ，   UTC + 8 = 本地时间， 东8区
 * 
 */ 
    memset(&tmNow, 0, sizeof(tmNow));
	localtime_r(&tNow, &tmNow);
	printf("%d年%d月%d日%d时%d分%d秒.\n", tmNow.tm_year+ 1900, tmNow.tm_mon+1, tmNow.tm_mday, tmNow.tm_hour,tmNow.tm_min, tmNow.tm_sec);



    //asctime:Sat Jan  6 19:07:31 2024
   // asctime 和 ctime 效果一样的， ctime 参数time_t  asctime 参数tm  
    printf("asctime:%s.\n", asctime(&tmNow));

}

